-
Notifications
You must be signed in to change notification settings - Fork 12.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Rollup of 25 pull requests #38697
Rollup of 25 pull requests #38697
Conversation
I timed this locally and plain old `gzip` took 2m06s while `gzip -9` took a whopping 6m23s to save a mere 4MB out of 1.2GB. Let's shave a few minutes off the Android builder by turning down the compression level.
Turns out that even though all these functions take a `size_t` they don't actually work that well with anything larger than the maximum value of `ssize_t`, the return value. Furthermore it looks like OSX rejects any read/write requests larger than `INT_MAX - 1`. Handle all these cases by just clamping the maximum size of a read/write on Unix to a platform-specific value. Closes rust-lang#38590
"verboten" is german for "forbidden"
- `--emit=asm --target=nvptx64-nvidia-cuda` can be used to turn a crate into a PTX module (a `.s` file). - intrinsics like `__syncthreads` and `blockIdx.x` are exposed as `"platform-intrinsics"`. - "cabi" has been implemented for the nvptx and nvptx64 architectures. i.e. `extern "C"` works. - a new ABI, `"ptx-kernel"`. That can be used to generate "global" functions. Example: `extern "ptx-kernel" fn kernel() { .. }`. All other functions are "device" functions.
We no longer use it, we use sccache
These are no longer used when running containers and tests.
On Android we only have one test thread for supposed problems with concurrency and the remote debugger. Not all of our suites require one concurrency, however, and suites like compile-fail or pretty can be much faster if they're parallelized on Travis. This commit only sets the test threads to one on Android for suites which actually run code, and other suites aren't tampered with.
Show errors sooner and try not to hide them behind lots of other walls of text.
A new option is introduced under the `[llvm]` section of `config.toml`, `targets`, for overriding the list of LLVM targets to build support for. The option is passed through to LLVM configure script. Also notes are added about the implications of (ab)using the option; since the default is not changed, and users of the option are expected to know what they're doing anyway (as every porter should), the impact should be minimal. Fixes rust-lang#38200.
(Minor typo fix.) The "support" in this case is possessed by the "programmer", and that ownership should be indicated by an apostrophe.
Resetting the terminal should first try `sgr0` (as per the comment), not `sg0` which I believe to be a typo. This will at least fix rustc output in Emacs terminals (e.g., ansi-term) with `TERM=eterm-color` which does not provide the next fallback `sgr`. In such a terminal, the final fallback `op` (`\e[39;49`) is used which resets only colors, not all attributes. This causes all text to be printed in bold from the first string printed in bold by rustc onwards, including the terminal prompt and the output from all following commands. The typo seems to have been introduced by rust-lang#29999
(Minor typo fix.) Since the word `i32` starts with a vowel, the indefinite article should use "an", not "a" \[[1](http://www.dictionary.com/browse/an)\]. (Previously there was one instance of "an i32" and two instances of "a i32", so at least something is wrong!) Since I believe that "an" is the correct form, I aligned everything with that.
This commit switches the rustbuild build system to compiling the compiler twice for a normal bootstrap rather than the historical three times. Rust is a bootstrapped language which means that a previous version of the compiler is used to build the next version of the compiler. Over time, however, we change many parts of compiler artifacts such as the metadata format, symbol names, etc. These changes make artifacts from one compiler incompatible from another compiler. Consequently if a compiler wants to be able to use some artifacts then it itself must have compiled the artifacts. Historically the rustc build system has achieved this by compiling the compiler three times: * An older compiler (stage0) is downloaded to kick off the chain. * This compiler now compiles a new compiler (stage1) * The stage1 compiler then compiles another compiler (stage2) * Finally, the stage2 compiler needs libraries to link against, so it compiles all the libraries again. This entire process amounts in compiling the compiler three times. Additionally, this process always guarantees that the Rust source tree can compile itself because the stage2 compiler (created by a freshly created compiler) would successfully compile itself again. This property, ensuring Rust can compile itself, is quite important! In general, though, this third compilation is not required for general purpose development on the compiler. The third compiler (stage2) can reuse the libraries that were created during the second compile. In other words, the second compilation can produce both a compiler and the libraries that compiler will use. These artifacts *must* be compatible due to the way plugins work today anyway, and they were created by the same source code so they *should* be compatible as well. So given all that, this commit switches the default build process to only compile the compiler three times, avoiding this third compilation by copying artifacts from the previous one. Along the way a new entry in the Travis matrix was also added to ensure that our full bootstrap can succeed. This entry does not run tests, though, as it should not be necessary. To restore the old behavior of a full bootstrap (three compiles) you can either pass: ./configure --enable-full-bootstrap or if you're using config.toml: [build] full-bootstrap = true Overall this will hopefully be an easy 33% win in build times of the compiler. If we do 33% less work we should be 33% faster! This in turn should affect cycle times and such on Travis and AppVeyor positively as well as making it easier to work on the compiler itself.
In an ongoing effort to optimize the runtime of the Android cross builder this commit updates the pretty test suites to run only for host platforms, not for target platforms as well. This means we'll still keep running all the suites but we'll only run them for configured hosts, not for configured targets. This notably means that we won't be running these suites on Android or musl targets, for example.
From suggestions at https://users.rust-lang.org/t/what-stable-rust-applications-do-you-use-frequently/7618 This adds some applications which use stable Rust and come with their own lockfiles in tree. ripgrep, xsv, and bins have 33 unique dependencies between them.
* Update to ripgrep HEAD because the previous rev would still change the lock file when `cargo build` was issued. * Remove `bins` as it depends on OpenSSL on Windows, which won't work on our bots * Update rev of tokei to get a rev that doesn't change the lockfile
This commit relegates all pretty tests to not get run by default and rather get run as part of an "aux" test suite. This "aux" suite is renamed from the old "cargotest" suite to just collect tests that don't need to run everywhere but should at least pass on Unix/Windows.
Incrementing the `Archive::child_iterator` fetches and validates the next child. This can trigger an error, which we previously checked on the *next* call to `LLVMRustArchiveIteratorNext()`. This means we ignore the last error if we stop iterating halfway through. This is harmless (we don't access the child, after all) but LLVM 4.0 calls `abort()` if *any* error goes unchecked, even a success value. This means that basically any rustc invocation that opens an archive and searches through it would die. The solution implemented here is to change the order of operations, such that advancing the iterator and fetching the newly-validated iterator happens in the same `Next()` call. This keeps the error handling behavior as before but ensures all `Error`s get checked.
Add some more repos to cargotest From suggestions at https://users.rust-lang.org/t/what-stable-rust-applications-do-you-use-frequently/7618 This adds some applications which use stable Rust and come with their own lockfiles in their respective trees. ripgrep, xsv, and bins have 33 unique dependencies between them. I alphabetized the list by project name because that seems tidier. r? @brson
📌 Commit e32df70 has been approved by |
⌛ Testing commit e32df70 with merge 4536280... |
💔 Test failed - status-travis |
@bors: r+ |
📌 Commit 63efcf0 has been approved by |
⌛ Testing commit 63efcf0 with merge c4908ce... |
💔 Test failed - status-travis |
@bors: r+ |
📌 Commit e484197 has been approved by |
☀️ Test successful - status-appveyor, status-travis |
This was intended to land in rust-lang#37149 but I ended up backing it out to land the rollup (rust-lang#38697) last night as I was itching to do so. This morning though xsv has been fixed now (BurntSushi/xsv#53) so we should be able to add it!
cargotest: Add xsv to tested crates This was intended to land in #37149 but I ended up backing it out to land the rollup (#38697) last night as I was itching to do so. This morning though xsv has been fixed now (BurntSushi/xsv#53) so we should be able to add it!
&&
intead of;
#38655, Add missing apostrophe. #38659, Fix default terminfo code for reset (sg0 -> sgr0) #38660, Use "an" before "i32" #38662, rustbuild: Move pretty test suites to host-only #38665, rustdoc: Fix broken CSS for trait items #38671, Add missing urls for atomic fn docs #38674, Check *all* errors in LLVMRustArchiveIterator* API #38676, Fix typo in PartialOrd docs #38693, appveyor: Attempt to debug flaky test runs #38695